import json
import os
import re

import pandas as pd

from model_api import qwen_api_no_search, zhipu_api_no_search
from tqdm import tqdm

path_dir = os.path.dirname(os.path.abspath(__file__))


system_prompt_concept = """
你是一位金融考试专家，专注于基于给定的考题进行分析。
我会给你一些信息，包含了:
- 两个专有名词（prop）
- 围绕这两个专有名词的一个问题（question）
- 对应这个问题的答案（answer）

你的任务是评估这个问题能够考察哪些需求点，并生成一个json列表。
需求点如下：
- 规定时间内完成
- 回答不包含事实性知识错误
- 回答不包含逻辑错误
- 回答不包含过时信息
- 应答尽答（召回率）
- 禁止答非所问（准确率）
- 回答要包含引用
- 召回内容和查询问题相关
- 回答包含全部信息
- 原始文档清洗
- 标准答案完全一致

你可以先进行一些思考，然后输出。输出格式固定为List[str]输出，你无需重复输出我的输入。
示例如下：

```json
[
  "规定时间内完成",
  "应答尽答（召回率）",
  "...",
  "...",
  "..."
]
```
"""

user_prompt_concept = """
请你基于以下的json，帮我确认有哪些需求点：
{json_str}
"""


def get_key_concept(json_data):
    new_data = dict()
    new_data['prop'] = json_data['prop']
    new_data['question'] = json_data['question']
    new_data['answer'] = json_data['answer']

    json_str = json.dumps(new_data, ensure_ascii=False, indent=4)

    convs = [
        {"role": "system", "content": system_prompt_concept},
        {"role": "user", "content": user_prompt_concept.format(json_str=json_str)}
    ]
    if 'qwen' in model.lower():
        llm_ans = qwen_api_no_search.qwen_call(model=model, convs=convs)
    elif 'glm' in model.lower():
        llm_ans = zhipu_api_no_search.zhipu_call(model=model, convs=convs)
    else:
        raise ValueError
    return llm_ans


if __name__ == '__main__':
    phase7_threshold = 0.85
    phase4_model = 'qwen3-max'
    model = 'qwen3-max'

    with open(os.path.join(path_dir, "phase9_output", f"{phase4_model}_questions_hard.json"), 'r', encoding='utf-8') as fp:
        hard_qas = json.load(fp)
    new_hard_qas = []
    for hard_qa in tqdm(hard_qas):
        llm_ans = get_key_concept(hard_qa)
        key_concept = llm_ans['answer']
        key_concept = re.search('```json(.+?)```', key_concept, re.S).group(1)
        key_concept = json.loads(key_concept)
        hard_qa['key_concept'] = json.dumps(key_concept, ensure_ascii=False)

    output_fp = open(os.path.join(path_dir, "phase10_output", f"{model}_questions_hard.json"), 'w', encoding='utf-8')
    json.dump(hard_qas, output_fp, ensure_ascii=False, indent=4)
    output_fp.close()

    for hard_qa in tqdm(hard_qas):
        props = hard_qa.pop('prop')
        hard_qa['prop1'] = props[0]
        hard_qa['prop2'] = props[1]

    df = pd.DataFrame(data=hard_qas)
    df.to_excel(os.path.join(path_dir, "phase10_output", f"{model}_questions_hard.xlsx"), index=False)
